#include "mytypef.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>


/// @brief 初始化结构体
/// @param  传NULL则不必给数据域赋值
/// @return 返回新结点的入口地址
P_Node_t Init_Get_Node(DataTypef *newdata);

/// @brief 获取新数据
/// @return 返回新数据
DataTypef Get_New_Data();

/// @brief 将要插入的数据有序排列
/// @param head 链表的头结点
/// @param newdata 要插入的新数据
/// @param cmp 进行排序(比较)的方法
void Sorting(P_Node_t head , P_Node_t newdata , Cmp_Ok cmp);

/// @brief 插入的方法为头插法
/// @param prev 要插入的新节点的前驱节点
/// @param newnode 要插入的新节点
/// @param next 要插入的新节点的后继节点
void Head2add(P_Node_t prev , P_Node_t newnode , P_Node_t next);

/// @brief 遍历显示链表
/// @param head 链表的头结点
void DisPlay(P_Node_t head , Print pri);

/// @brief 分别用Num Name Score进行比较
/// @param A 传入的链表中的数据入口地址
/// @param B 传入的新数据的入口地址
/// @return 放回true或false------
bool Cmp_Num(DataTypef *A , DataTypef *B);
bool Cmp_Name(DataTypef *A , DataTypef *B);
bool Cmp_Score(DataTypef *A , DataTypef *B);

//bool Com_Size(DataTypef *A , DataTypef* B);

P_Node_t Find_fun(P_Node_t head , char * find);
void Del_Fun( P_Node_t Prev , P_Node_t Del , P_Node_t Next);
P_Node_t Update(P_Node_t Name);
void Destroy(P_Node_t head , P_Node_t node);